import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

/* eslint-disable */
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import {ElementPlusResolver} from 'unplugin-vue-components/resolvers'
/* eslint-disable */
// path 模块找不到, 安装 npm i @types/node -D
import {resolve} from 'path'

export default defineConfig({
	plugins: [
		// 自动导入
		AutoImport({
			// ElementPlus
			resolvers: [ElementPlusResolver()],
			// 其他
			imports: ['vue', 'vue-router', 'vue-i18n', '@vueuse/head', '@vueuse/core'],
		}),
		Components({
			resolvers: [ElementPlusResolver()]
		}),
		vue()
	],
	resolve: {
		// 设置系统路径别名
		alias: {
			// 设置 `@` 指向 `src` 目录
			'@': resolve(__dirname, 'src'),
			'@components': resolve(__dirname, 'src/components'),
			'@assets': resolve(__dirname, 'src/assets'),
			'@utils': resolve(__dirname, 'src/utils'),
			'@views': resolve(__dirname, 'src/views'),
			'@store': resolve(__dirname, 'src/store'),
			'@api': resolve(__dirname, 'src/api')
		}
	},
	// 依赖优化
	optimizeDeps: {
		// 强制预构建包
		include: [
			'vue',
			'element-plus/es',
			'vue-router',
			'axios',
			'@vueuse/core'
		]
	},
	// 设置打包路径
	base: './',
	// 打包配置
	build: {
		rollupOptions: {
			output: {
				// 最小化拆分包
				manualChunks(id) {
					if (id.includes("node_modules")) {
						return id.toString().split("node_modules/")[1].split("/")[0].toString()
					}
				},
				// 用于从入口点创建的块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值
				entryFileNames: 'js/[name].[hash].js',
				// 用于命名代码拆分时创建的共享块的输出命名
				chunkFileNames: 'js/[name].[hash].js',
				assetFileNames: '[ext]/[name].[hash].[ext]',
				// 拆分 js 到模块文件夹
				// chunkFileNames: (chunkInfo) => {
				// 	const facadeModuleId = chunkInfo.facadeModuleId ? chunkInfo.facadeModuleId.split('/') : [];
				// 	const fileName = facadeModuleId[facadeModuleId.length - 2] || '[name]';
				// 	return `js/${fileName}/[name].[hash].js`;
				// }
			}
		},
		terserOptions: {
			// 清除 console 和 debugger
			compress: {
				drop_console: true,
				drop_debugger: true,
			},
		}
	},
	// 服务配置
	server: {
		// 设置服务启动端口号
		port: 8081,
		// 设置服务启动时自动打开浏览器
		open: true,
		// 允许跨域
		cors: true,
		// 设置 IP
		host: '0.0.0.0'
	}
})
